草庐IT

Android AsyncTask 内存泄漏

全部标签

java - 如果我们在java中只声明一个变量而没有初始化,内存中会发生什么?

如果我们只是创建一个引用变量或为原始数据类型或引用数据类型声明一个变量而不用任何值初始化,如下所示,内存中会发生什么?intx;Employeeemp;那么在这两种情况下内存中到底发生了什么?在此阶段是否分配了任何内存,或者它是否指向任何随机位置或指向空值或指向垃圾值?与第二种情况一样,如果我们使用带有new运算符的构造函数或使用任何其他方式创建对象,则只会在内存中创建空间。Employeeemp=newEmployee(); 最佳答案 Java虚拟机(JVM)从操作系统分配堆内存,然后为Java应用程序管理自己的堆。当应用程序创建

java - 内存数据库H2中的Spring Boot不会在初始化时从文件加载数据

我在应用程序初始化时将数据加载到内存数据库时遇到问题。我创建了包含表结构和初始数据的schema.sql和data.sql文件。架构.sql:CREATETABLEusers(idINTPRIMARYKEY,usernameVARCHAR(64)NOTNULL,passwordVARCHAR(64));和data.sql:INSERTINTOusers(id,username,password)VALUES(1,'usr1','bigSecret'),(2,'usr2','topSecret');我正在使用JpaRepository处理数据层:publicinterfaceUserRe

java - 我可以启动一个 Eden 空间如此之大的 JVM,它运行到完成而没有任何 GC。假设我有一堆空闲内存

如果我有足够的空闲内存,我可以启动一个Java应用程序(说mMven)来单独使用Eden空间运行直到完成而不需要任何GC吗? 最佳答案 是的,我已经为Java6+中的实际应用程序完成了此操作。我从一个24GB的Eden空间、微型幸存者空间和永久空间开始。后来发现8GB绰绰有余。当有bug或错误时它仍然会GC,但在正常操作下不会。我相信选项是-Xmn24g-Xmx26g-XX:SurvivorRatio=100使用默认GC。该应用程序经过优化,生成的数据量低于1GB/小时,因此使用GC运行一天。

java - 从 Java 内存模型的角度理解为什么在构造函数中启动线程是不安全的

这个问题在这里已经有了答案:Whyshouldn'tIuseThread.start()intheconstructorofmyclass?(2个答案)关闭3年前。根据JavaConcurrencyinPractice,在类构造函数中启动线程是危险的。原因是在对象完全构造之前,this将this指针暴露给另一个线程。尽管这个话题在之前的许多StackOverflow问题中都有讨论,但我仍然难以理解为什么这是一个如此令人担忧的问题。特别是,我希望从Java内存模型的角度澄清在构造函数内启动线程是否会导致内存一致性问题。让我举一个具体的例子来说明我想做的事情。(这段代码的期望输出是将数字2

java - BufferedImage.getGraphics() 导致内存泄漏,有解决办法吗?

我在调用BufferedImage.getGraphics()方法的某些框架API时遇到问题,从而导致内存泄漏。这个方法的作用是它总是调用BufferedImage.createGraphics()。在Windows机器上,createGraphics()由Win32GraphicsEnvironment处理,它在其字段displayChanger中保留一个listeners列表。当我在BufferedImagesomeChart上调用getGraphics时,someChart的SurfaceManager(保留对someChart的引用)被添加到监听器在Win32GraphicsE

java - 在 Java 中,有没有办法随机化一个太大而无法放入内存的文件?

我想做的是打乱行(从CSV读取),然后将第一个随机的10,000行打印到一个csv,其余的打印到一个单独的csv。使用较小的文件我可以做类似的事情java.util.Collections.shuffle(...)for(inti=0;i但是对于非常大的文件,我现在得到OutOfMemoryError 最佳答案 你可以:使用更多内存或洗牌不是实际的CSV行,而是行号的集合,然后逐行读取输入文件(当然是缓冲的)并将该行写入所需的输出文件之一。 关于java-在Java中,有没有办法随机化一

java - 在 Java 中处理大字符串时出现 StringBuilder 内存不足错误

我从Stringtest+=str;开始,其中test以指数级增长,包含成千上万个字符。运行需要45分钟,可能是因为创建了大字符串并删除了垃圾。然后我像这样错开输入,将其带到30秒。这似乎是一种廉价的方法,但效果很好:if(secondDump.length()>50){intermedDump=intermedDump+secondDump;secondDump="";}if(intermedDump.length()>100){thirdDump=thirdDump+intermedDump;intermedDump="";}if(thirdDump.length()>500){f

java - 来自文件的 ObjectInputStream 导致内存泄漏

我有一个巨大的文件,其中包含一个接一个由ObjectOutputStream写入的对象列表。for(Objectobj:currentList){oos.writeUnshared(obj);}现在我想使用ObjectInputStream读取这个文件。但是,我需要同时读取多个文件,所以无法将整个文件读入内存。但是,使用ObjectInputStream会导致堆内存不足错误。据我了解,这是因为ObjectInputStream存在内存泄漏并在返回读取对象后仍保留对读取对象的引用。我怎样才能让ObjectInputStream不维护任何读取的引用? 最佳答案

java - 内存泄漏在 MAT 中显示为 GC root : Native Stack

我有一些我运行的第三个库代码,一段时间后我遇到了OutOfMemoryError。所以我启动了EclipseMAT并分析了内存。现在似乎无法释放内存,因为有一个对象显示为GCroot:NativeStack。阅读documentation:Inoroutparametersinnativecode,suchasuserdefinedJNIcodeorJVMinternalcode.ThisisoftenthecaseasmanymethodshavenativepartsandtheobjectshandledasmethodparametersbecomeGCroots.Forexa

java - Java 内存模型中的 Happens-Before 关系

关于JLSch17ThreadsandLocks,它说“如果一个Action发生在另一个Action之前,那么第一个Action对第二个Action可见并在第二个Action之前排序”;我想知道:(1)说“之前订购”究竟是什么意思?因为即使action_ahappens-beforeaction_b,在某些实现中action_a也可以在action_b之后执行,对吗?(2)如果action_a发生在action_b之前,是否意味着action_a不能看到action_b?或者action_a可能看到也可能看不到action_b?(3)如果action_a没有发生在action_b之前,